package br.com.cfccultura.admin.control.actions.financeiro;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Component;

import br.com.cfccultura.admin.control.actions.DefaultAction;
import br.com.cfccultura.admin.control.forms.financeiro.ContaReceberForm;
import br.com.cfccultura.admin.model.enums.SituacaoConta;
import br.com.cfccultura.admin.model.vo.ContaReceber;
import br.com.cfccultura.admin.model.vo.DirecionamentoCheque;
import br.com.cfccultura.admin.model.vo.OrdemServico;

@Component("/contaReceber")
public class ContaReceberAction extends DefaultAction {
	
	private static final Logger logger = Logger.getLogger(ContaReceberAction.class); 
	
	public ActionForward iniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		ContaReceber filtro = new ContaReceber();
		filtro.setDataMenor(new Date());
		filtro.setSituacao(SituacaoConta.PENDENTE);
		List<ContaReceber> vencido = getFluxoCaixaDAO().consulta(filtro);
		
		filtro = new ContaReceber();
		filtro.setVencimento(new Date());
		List<ContaReceber> vencer = getFluxoCaixaDAO().consulta(filtro);
		
		filtro = new ContaReceber();
		filtro.setDataMaior(new Date());
		List<ContaReceber> futuro = getFluxoCaixaDAO().consulta(filtro);
		
		if(vencido.size() > 0)
			request.setAttribute("vencido", vencido);
			double totalVencido = 0D;
			for(ContaReceber receber : vencido) {
				totalVencido += receber.getValorPagamento();
				if(receber.getSituacao().equals(SituacaoConta.PENDENTE_ALUNO)) {
					OrdemServico os = getOrdemServicoDAO().consultar(receber.getOrdemServicoEspecie().getOrdemServico().getCodigo(), false, true);
					receber.setValorPagamento(os.getTotal());
				}
			}
			request.setAttribute("totalVencido", totalVencido);
		if(vencer.size() > 0) {
			request.setAttribute("vencer", vencer);
			double totalVencer = 0D;
			for(ContaReceber receber : vencer) {
				totalVencer += receber.getValorPagamento();
				if(receber.getSituacao().equals(SituacaoConta.PENDENTE_ALUNO)) {
					OrdemServico os = getOrdemServicoDAO().consultar(receber.getOrdemServicoEspecie().getOrdemServico().getCodigo(), false, true);
					receber.setValorPagamento(os.getTotal());
				}
			}
			request.setAttribute("totalVencer", totalVencer);
		}
		if(futuro.size() > 0) {
			request.setAttribute("futuro", futuro);
			double totalFuturo = 0D;
			for(ContaReceber receber : futuro) {
				totalFuturo += receber.getValorPagamento();
				if(receber.getSituacao().equals(SituacaoConta.PENDENTE_ALUNO)) {
					OrdemServico os = getOrdemServicoDAO().consultar(receber.getOrdemServicoEspecie().getOrdemServico().getCodigo(), false, true);
					receber.setValorPagamento(os.getTotal());
					totalFuturo += receber.getValorPagamento();
				}
			}
			request.setAttribute("totalFuturo", totalFuturo);
		}
		
		return mapping.findForward("body");
	}
	
	public ActionForward confirmarRecebimento(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		ContaReceberForm receberForm = (ContaReceberForm) form;

		Date data = new Date();
		ContaReceber conta = null;
		for(Integer i : receberForm.getContaReceber()) {
			conta = getFluxoCaixaDAO().consulta(new ContaReceber(i)).get(0);
			conta.setUsuarioSistema(getUsuario(request));
			getOrdemServicoDAO().associarDirecionamentoCheque(conta.getOrdemServicoEspecie(), new DirecionamentoCheque(receberForm.getDirecionamentoCheque()));
			getFluxoCaixaDAO().confirmarRecebimento(conta, data);
		}
		
		return null;
	}

}
